// PROGRAMA : IDCPC003
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 30/06/92
// OBJETIVO : CONSULTA/EMISSAO ATUALIZACOES; OPCAO: 'CAI'
// ATUALIZACOES DATA
// PROGRAMA : IDCPC003 03/11/1997
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ALTERCAO DE TELA 28/09/1999
// : ACERTO DE CAMPO 11/06/2002
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.Arrays;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpc003Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpc003A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc001;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc003;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Idclc001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpc003 OBJETIVO : CONSULTA/EMISSAO ATUALIZACOES; OPCAO: 'CAI' *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpc003")
public class Idcpc003 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	// Telas/relatorios utilizados
	Idcpc003A idcpc003A;
	Idctc001 idctc001;
	Idctc003 idctc003;
	Idcpc003Report report;
	// Includes utilizados
	Idclc001 idclc001 = new Idclc001();
	Sisll001 sisll001 = new Sisll001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Idccc001 idccc001;

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcpc003 idcpc003Anterior;
	String faseproc = "0";
	int nroReg = 1;

	private int i = 0;
	private int iAte = 0;

	// private String[] conimp = new String[3];
	// private long[] reg0 = new long[15];
	// private int[] ate0 = new int[15];
	// private String[] pol0 = new String[15];
	// private String[] pol1 = new String[15];
	// private String[] ind0 = new String[15];
	// private String[] ind1 = new String[15];
	// private String[] med0 = new String[15];
	// private String[] med1 = new String[15];
	// private String[] anu0 = new String[15];
	// private String[] anu1 = new String[15];
	// private String[] min0 = new String[15];
	// private String[] min1 = new String[15];
	// private int[] mat0 = new int[15];
	// private int[] atu1 = new int[15];
	private int[] alt0 = new int[15];

	private Idcpc003A preMapas() {
		int ind;
		idcpc003A = new Idcpc003A(true, sessao);
		idctc001 = new Idctc001(true, sessao);
		idctc003 = new Idctc003(true, sessao);
		for (ind = 1; ind <= 2; ind++) {
			idcpc003A.setConimp(ind, "");
		}
		for (ind = 1; ind <= 14; ind++) {
			idctc003.setReg0(ind, 0);
			idctc003.setAte0(ind, 0);
			idctc003.setPol0(ind, "");
			idctc003.setPol1(ind, "");
			idctc003.setInd0(ind, "");
			idctc003.setInd1(ind, "");
			idctc003.setMed0(ind, "");
			idctc003.setMed1(ind, "");
			idctc003.setAnu0(ind, "");
			idctc003.setAnu1(ind, "");
			idctc003.setMin0(ind, "");
			idctc003.setMin1(ind, "");

			idctc003.setMat0(ind, 0);
			idctc003.setAtu1(ind, 0);
		}
		Arrays.fill(alt0, 0);
		idctc001.setDataCorrente(UtilBean.obtemDataDia());
		// Par�grafo: rotina01()
		return idcpc003A;
	}

	public Idcpc003(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Idcpc003A idcpc003A, Idctc001 idctc001, Idctc003 idctc003) {
		try {
			main(idcpc003A, idctc001, idctc003);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idcpc003A pidcpc003A, Idctc001 pidctc001, Idctc003 pidctc003) throws Exception {
		if (pidcpc003A == null && pidctc001 == null && pidctc003 == null) {
			primeiraVez = true;
			// idctc003 = new Idctc003 (primeiraVez);
			idcpc003A = preMapas();
			idcpc003A.setNavegar("../idcpc003/executar");
			result.include("idcpc003A", idcpc003A);
			sessao.setAtributo("IDCPC003", this);
			idcpc003A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidcpc003A, pidctc001, pidctc003);
		}

		idctc001.setConf("S");
		// DEFINE PRINTER(EFM = 1)

		if (idcpc003A != null) {
			idcpc003A.receberTela(false, result);
			if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
				idcpc003A.enviarMensagem(null, "");
				return;
			}
			if (!idctc001.getOperacao().equals("CAI")) {
				funcoes.sissm001(result, sessao);
			}
			// CHAMA PROGRAMA DE ACORDO COM OPERACAO

			if (UtilBean.validarMascara(idcpc003A.getDatini(), "yyyyMMdd")) {
				idcpc003A.enviarMensagem("operacao", "");
				return;
			}
			if (UtilBean.validarMascara(idcpc003A.getDatfim(), "yyyyMMdd")) {
				idcpc003A.enviarMensagem("adt", "");
				return;
			}
			if (idcpc003A.getDatini() > idcpc003A.getDatfim()) {
				idcpc003A.enviarMensagem("adt", "");
				return;
			}
			idctc003.setDtini(idcpc003A.getDatini());
			idctc003.setDtini((int) funcoes.sissd002(idctc003.getDtini()));
			// INVERTE DATA
			idctc003.setDtfim(idcpc003A.getDatfim());
			idctc003.setDtfim((int) funcoes.sissd002(idctc003.getDtfim()));
			// INVERTE DATA
			if (UtilBean.validaSelecao(idcpc003A.getConimp())) {
				idcpc003A.enviarMensagem("matd1", "");
				return;
			}
		}
		if (!idcpc003A.getConimp(2).trim().equals("")) {
			relatorio();
		} else {
			while (vwDidcad.pesquisaDataAtualizacaoFaixa(idcpc003A.getDatini(), idcpc003A.getDatfim()) && i < iAte) {
				i++;
			}
			i = 0;
			while (vwDidcad.pesquisaDataAtualizacaoFaixa(idcpc003A.getDatini(), idcpc003A.getDatfim()) && i < 14) {
				if (idcpc003A.getMatd1() > 0) {
					if (!(idcpc003A.getMatd1() == vwDidcad.getMatriculaFunc())) {
						continue;
					}
				}
				i += 1;
				idctc003.setAtu1(i, vwDidcad.getDataAtualizacao());
				idctc003.setAtu1(i, (int) funcoes.sissd002(idctc003.getAtu1(i)));
				// INVERTE DATA

				idctc003.setAte0(i, vwDidcad.getMatriculaFuncionario());
				idctc003.setPol0(i, vwDidcad.getPolegarDireito());
				idctc003.setReg0(i, vwDidcad.getNumeroRg());
				idctc003.setMat0(i, vwDidcad.getMatriculaFunc());
				idctc003.setInd0(i, vwDidcad.getIndicadorDireito());
				idctc003.setMed0(i, vwDidcad.getMedioDireito());
				idctc003.setAnu0(i, vwDidcad.getAnularDireito());
				idctc003.setMin0(i, vwDidcad.getMinimoDireito());
				idctc003.setPol1(i, vwDidcad.getPolegarEsquerdo());
				idctc003.setInd1(i, vwDidcad.getIndicadorEsquerdo());
				idctc003.setMed1(i, vwDidcad.getMedioEsquerdo());
				idctc003.setAnu1(i, vwDidcad.getAnularEsquerdo());
				idctc003.setMin1(i, vwDidcad.getMinimoEsquerdo());
				alt0[i] = vwDidcad.getAlturaIdent();
			}
			if (i > 0) {
				switch (saida(pidctc003)) {
				case 0: // Enviar tela
				{
					result.include("idctc003", idctc003);
					sessao.setAtributo("IDCPC003", this);
					idctc003.receberTela(false, result);
					return;
				}
				case 1: // Processou Ok
				{
					iAte = iAte + 14;
					result.include("idctc003", idctc003);
					sessao.setAtributo("IDCPC003", this);
					idctc003.receberTela(false, result);
					return;
				}
				case 2: // Erro consistencia
				{
					result.include("idctc003", idctc003);
					sessao.setAtributo("IDCPC003", this);
					idctc003.receberTela(false, result);
					return;
				}
				case 9: // Deprezar registro
				{

				}
				}
			}
			// if (idctc003.getConf().equals("N")) {
			// break;
			// }

		}
		// if (i > 0) {
		// saida(pidctc003);
		// }
		if (vwDidcad.registrosProcessados() == 0) {
			idcpc003A.enviarMensagem(null, "");
			return;
		}
		sessao.setAtributo("IDCPC003", this);
		result.include("idctc003", idctc003);
		idctc003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private int saida(Idctc003 pidctc003) throws Exception {
		String msgret = "";

		if (pidctc003 == null) {
			return 0;
		}
		if (pidctc003 != null) {
			idctc003.receberTela(false, result);
			if (idctc003.getConf().equals("N")) {
				return 9;
			}
			if (idctc003.getOpc() == 0) {
				return 9;
			}
			// TELA DE CONSULTA DAS ATUALIZACOES
			if (idctc003.getOpc() > i) {
				idctc003.enviarMensagem(null, "NUMERO SELECIONADO INVALIDO");
				return 2;
			}
		}
		while (vwDidcad.leituraNumeroRgMaiorig(idctc003.getReg0(idctc003.getOpc())) && vwDidcad.registrosProcessados() < nroReg)
			;
		if (vwDidcad.registrosProcessados() == nroReg) {
			idctc001 = idccc001.executar(vwDidcad);
			// COPYCODE: CONSULTA IDCPCA01/003/004 E 005
			if (!idctc001.getOperacao().equals("CAI")) {
				funcoes.sissm001(result, sessao);
			}

			// CHAMA PROGRAMA DE ACORDO COM OPERACAO
			idctc001.setConf("S");

			idctc001.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			// TELA CONSULTA ATUALIZACOES
			return 0;
		}
		for (int i1 = 1; i1 <= 14; i1++) {
			idctc003.setReg0(i1, 0);
			idctc003.setAte0(i1, 0);
			idctc003.setPol0(i1, "");
			idctc003.setPol1(i1, "");
			idctc003.setInd0(i1, "");
			idctc003.setInd1(i1, "");
			idctc003.setMed0(i1, "");
			idctc003.setMed1(i1, "");
			idctc003.setAnu0(i1, "");
			idctc003.setAnu1(i1, "");
			idctc003.setMin0(i1, "");
			idctc003.setMin1(i1, "");

			idctc003.setMat0(i1, 0);
			idctc003.setAtu1(i1, 0);
			alt0[i1] = 0;
		}
		i = 0;
		idcpc003A.setMensagemSaida("CONSULTA EFETUADA OK");
		return 1;
	}

	private void relatorio() throws JRException, ParseException, FileNotFoundException {
		while (vwDidcad.pesquisaDataAtualizacaoFaixa(idcpc003A.getDatini(), idcpc003A.getDatfim())) {
			if (idcpc003A.getMatd1() > 0) {
				if (!(vwDidcad.getMatriculaFuncionario() == idcpc003A.getMatd1())) {
					continue;
				}
			}
			report = new Idcpc003Report();
			report.setPageSize(60);
			report.setLineSize(134);
			report.setNome(vwDidcad.getNomeIdent());

			report.setDinideRegger(vwDidcad.getNumeroRg());

			report.setDiaidePoldir(vwDidcad.getPolegarDireito());
			report.setDiaideInddir(vwDidcad.getIndicadorDireito());
			report.setDiaideMeddir(vwDidcad.getMedioDireito());
			report.setDiaideAnudir(vwDidcad.getAnularDireito());
			report.setDiaideMindir(vwDidcad.getMinimoDireito());

			report.setDiaidePolesq(vwDidcad.getPolegarEsquerdo());
			report.setDiaideIndesq(vwDidcad.getIndicadorEsquerdo());
			report.setDiaideMedesq(vwDidcad.getMedioEsquerdo());
			report.setDiaideAnuesq(vwDidcad.getAnularEsquerdo());
			report.setDiaideMinesq(vwDidcad.getMinimoEsquerdo());

			report.setDinideNumpos(vwDidcad.getNumeroPosto());
			report.setDinideNumpro(vwDidcad.getNumeroProtocolo());

			// RELATORIO EFM PS=60 LS=134 SG=ON
			// RELATORIO
			report.gravaRelatorio(2);

			// RELATORIO

		}
		if (vwDidcad.registrosProcessados() == 0) {
			idcpc003A.setMensagemSaida("INTERVALO INEXISTENTE");
		} else {
			idcpc003A.setMensagemSaida("EMISSAO EFETUADA OK");
			report.imprimir();
		}
	}

	private void restaurarEstados(Idcpc003A pidcpc003A, Idctc001 pidctc001, Idctc003 pidctc003) {
		this.idcpc003Anterior = (Idcpc003) sessao.getAtributo("IDCPC003");
		if (pidcpc003A != null) {
			idcpc003A = pidcpc003A;
		} else {
			idcpc003A = this.idcpc003Anterior.idcpc003A;
		}
		idcpc003A.setSessao(sessao);
		if (pidctc001 != null) {
			idctc001 = pidctc001;
		} else {
			idctc001 = this.idcpc003Anterior.idctc001;
		}
		idctc001.setSessao(sessao);
		if (pidctc003 != null) {
			idctc003 = pidctc003;
		} else {
			idctc003 = this.idcpc003Anterior.idctc003;
		}
		idctc003.setSessao(sessao);
		this.faseproc = this.idcpc003Anterior.faseproc;
		this.nroReg = this.idcpc003Anterior.nroReg;
		this.iAte = this.idcpc003Anterior.iAte;
	}
}
